    /**
    * android-extra.js
    *
    * 此脚本为 SimpleNoteEditor 在 Android WebView 中运行提供额外的桥接功能。
    * 它依赖于页面中已存在的 window.MindNoteJSBridge 接口以及编辑器的全局 API。
    */

(function() {
    'use strict';

    // --- 内部状态 ---

    /**
     * 一个标志位，用于控制是否触发 onContentChanged 回调。
     * 在通过 requestLoad 加载内容时，需要暂时禁用它，以防止产生不必要的“未保存”状态。
     * @type {boolean}
     */
    let isContentChangeNotificationEnabled = true;

    // --- 与 Android 桥接的核心逻辑 ---

    /**
     * 监听编辑器的输入事件，并在内容变化时通知 Android 端。
     */
    function setupContentChangeListener() {
        const editor = document.getElementById('editor');
        if (!editor) {
            console.error("android-extra.js: Editor element not found. Cannot setup content change listener.");
            return;
        }

        editor.addEventListener('input', () => {
            // 只有在通知启用时，才调用 onContentChanged
            if (isContentChangeNotificationEnabled) {
                if (window.MindNoteJSBridge && typeof window.MindNoteJSBridge.onContentChanged === 'function') {
                    window.MindNoteJSBridge.onContentChanged();
                } else {
                    console.warn("android-extra.js: MindNoteJSBridge.onContentChanged is not available.");
                }
            }
        });
    }

    // --- 暴露给 Android 调用的全局方法 ---

    /**
     * 请求保存当前笔记内容。
     * 此方法会收集编辑器的内容和当前光标行号，并通过 MindNoteJSBridge 回调给 Android 端。
     */
    window.requestSave = function() {
        console.log("android-extra.js: Requesting save...");

        if (typeof window.getEditorContent !== 'function' || typeof window.getCurrentLineNumber !== 'function') {
            console.error("android-extra.js: Editor API (getEditorContent or getCurrentLineNumber) not found.");
            return;
        }

        if (window.MindNoteJSBridge && typeof window.MindNoteJSBridge.onSaveData === 'function') {
            try {
                const contentData = window.getEditorContent();
                const lineNumber = window.getCurrentLineNumber();
                const jsonData = JSON.stringify(contentData);

                console.log(`android-extra.js: Calling onSaveData with data length ${jsonData.length} and line ${lineNumber}.`);
                window.MindNoteJSBridge.onSaveData(jsonData, lineNumber);
            } catch (e) {
                console.error("android-extra.js: Failed to get content or stringify data.", e);
            }
        } else {
            console.warn("android-extra.js: MindNoteJSBridge.onSaveData is not available.");
        }
    };

    /**
     * 请求加载指定的笔记内容。
     * 此方法会暂时禁用内容变更通知，加载新内容，定位到指定行，然后重新启用通知。
     * @param {Object} content - 要加载的笔记内容对象，格式应与 getEditorContent 返回的数组项一致。
     * @param {number} lineNumber - 加载后光标需要定位到的行号（从1开始）。
     */
    window.requestLoad = function(content, lineNumber) {
        console.log(`android-extra.js: Requesting load with line ${lineNumber}...`);

        if (typeof window.setEditorContent !== 'function' || typeof window.setCurrentLineNumber !== 'function') {
            console.error("android-extra.js: Editor API (setEditorContent or setCurrentLineNumber) not found.");
            return;
        }

        // 1. 暂时禁用内容变更通知
        isContentChangeNotificationEnabled = false;
        console.log("android-extra.js: Disabled content change notifications.");

        // 2. 加载内容
        // 假设传入的 content 是一个数组，或者为了兼容性，如果不是则包装成数组
        const dataToLoad = Array.isArray(content) ? content : [content];
        window.setEditorContent(dataToLoad);

        // 3. 定位光标
        if (typeof lineNumber === 'number' && lineNumber > 0) {
            window.setCurrentLineNumber(lineNumber);
        }

        // 4. 在下一个事件循环中重新启用通知
        // 这是为了确保 setEditorContent 和 setCurrentLineNumber 引起的所有内部事件都已完成
        setTimeout(() => {
            isContentChangeNotificationEnabled = true;
            console.log("android-extra.js: Re-enabled content change notifications.");
        }, 0);
    };


    // --- 初始化 ---

    // 等待 DOM 完全加载后再设置监听器
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', setupContentChangeListener);
    } else {
        // DOMContentLoaded has already fired
        setupContentChangeListener();
    }

})();
